<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script type="text/javascript">
         function* gen(x){
            console.log("y",x)
            let y = yield x + 2;
            console.log("y",y)
          }
          //上面代码就是一个 Generator 函数。它不同于普通函数，是可以暂停执行的，所以函数名之前要加星号，以示区别。
          //整个 Generator 函数就是一个封装的异步任务，或者说是异步任务的容器。异步操作需要暂停的地方，都用 yield 语句注明。
          var g = gen(1);
          //console.log(g)
          let obj=g.next(); // { value: 3, done: false }
          console.log(obj);
          let endObj=g.next(); // { value: undefined, done: true }
          console.log(endObj);
          //上面代码中，调用 Generator 函数，会返回一个内部指针（即遍历器g 。这是 Generator 函数不同于普通函数的另一个地方，即执行它不会返回结果，返回的是指针对象。调用指针 g 的 next 方法，会移动内部指针（即执行异步任务的第一段），指向第一个遇到的 yield 语句，上例是执行到 x + 2 为止。
          
    </script>
</body>
</html>